#include <stdio.h>
#include <stdlib.h>
#include "../../HeadFiles/ChainsH/CartChain.h"
#include "../../HeadFiles/UsedStd.h"

void displayThisCart(struct CartNode * cartDisplayPtr)
{
    struct CartNode * this = cartDisplayPtr;
    puts(SPLIT_STR);
    printf("Commodity Name: %s\n", this->unitName);
    printf("Original Price: %.2f\n", this->soldPrice_Original);
    printf("Discount Price: %.2f\n", this->soldPrice_Discount);
    printf("Unit Count: %d\n", this->unitCount);
    printf("Total = %.2f\n", this->unitCount * this->soldPrice_Discount);


    puts(SPLIT_STR);
}

void  delCartNode(struct CartNode ** head, struct CartNode ** tail, struct CartNode * p)
{
    // ** head, ** tail是头尾指针的地址，直接对其解引用，然后加以修改
    // 注意，p是指向节点的指针，和head，tail不一样
    if(* head == p || * tail == p)
    {
        // 如果要删除的节点比较特殊，是头或尾节点
        if(* head == p && * tail == p)
        {
            // 要删除的节点既是头又是尾， 此时链表只有这一个元素
            free(* head);
            * head = * tail = NULL; // free后内存被清理，但是指针仍指向该地址，必须置空防bug
            return ;
        }
        if(* head == p && * tail != p)
        {
            // 要删除的节点是头，但不是尾
            struct CartNode * temp = * head;
            * head = (* head)->nextCart;
            (* head)->preCart = NULL;
            free(temp);
            return ;
        }
        if(* head != p && * tail == p)
        {
            // 要删除的节点是尾，但不是头
            struct CartNode * temp = * tail;
            * tail = (* tail)->preCart;
            (* tail)->nextCart = NULL;
            free(temp);
            return ;
        }
    }
    // 如果删除的节点不是头或者尾的特殊情况
    // 注意，p是指向节点的指针，和head，tail不一样
    p->nextCart->preCart = p->preCart;
    p->preCart->nextCart = p->nextCart;
    free(p);
}